package org.way.base.util;

import java.util.*;

public class SortedUtil {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(0, 1, 1, 2, 4, 6, 6, 8, 9));
        rank1(list);
    }

    public static void rank1(List<Integer> list) {
        Collections.sort(list);
        Set<Integer> set = new HashSet<>(list);
        list.forEach(l->{
            int index = 0;
            for (Integer s : set) {
                index++;
                if(l.equals(s)) {
                    System.out.println(l + " 的排名是: " + index);
                    break;
                }
            }
        });
    }

    public static void rank2(List<Integer> list) {
        // 排序（如果需要的话，因为相同元素的排名相同，所以排序不是必须的，但可以帮助我们理解）
        Collections.sort(list);

        // 排名
        Map<Integer, Integer> rankMap = new HashMap<>();
        int rank = 1;
        for (int i = 0; i < list.size(); ) {
            int current = list.get(i);
            // 计算当前元素及其连续相同元素的排名
            int end = i;
            while (end < list.size() && list.get(end) == current) {
                end++;
            }
            // 给所有相同的元素分配相同的排名
            for (int j = i; j < end; j++) {
                rankMap.put(list.get(j), rank);
            }
            // 移动到下一个不同元素的起始位置
            i = end;
            // 如果不是最后一个元素，则排名递增
            if (i < list.size()) {
                rank++;
            }
        }

        // 打印排名结果
        for (int num : list) {
            System.out.println(num + " 的排名是: " + rankMap.get(num));
        }
    }
}
